package com.six.backend.service;

import com.six.backend.pojo.*;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @author : 张重阳
 * @date : 2021-11-26 14:39
 */

@Transactional(rollbackFor = RuntimeException.class)
public interface ToolService {
    /**
     * 查询与当前用户有关的工具列表
     * @param map
     * @return
     */
    List<Tool> getTools(Map map);

    /**
     * 查询所有工具列表
     * @param map
     * @return
     */
    List<Tool> getAllTools(Map map);

    /**
     * 查询德尔菲列表
     * @param toolId 工具编号
     * @return List<Delphi>
     */
    List<Delphi> getDelphi(Integer toolId);

    /**
     * 插入问卷相关信息
     * @param questionnaire 问卷信息
     * @return 问卷是否插入成功
     */
    Integer postQuestionnaire(Questionnaire questionnaire);

    /**
     * 插入问卷内的问题
     * @param topic 问题的相关信息
     * @param questionnareId 问卷id
     * @return 是否插入成功
     */
    boolean postQuestion(List<Question> topic,Integer questionnareId);

    /**
     * 获取问卷的信息（不包括问卷所含题目）
     * @param name 问卷的名字
     * @return 问卷的列表
     */
    List<Questionnaire> getQuestionnaire(String name);

    /**
     * 获取正在使用该问卷的工具
     * @param questionnaireId
     * @return
     */
    List<Tool> getUsingToolsByQuestionnaireId(Integer questionnaireId);

    /**
     * 获取问卷内的题目内容
     * @param id 问卷的id
     * @return Question集合
     */
    List<Question> getQuestion(Integer id);

    /**
     * 删除问卷及相关信息
     * @param id 问卷的编号
     * @return 是否删除成功
     */
    boolean deleteQuestionnaire(Integer id);

    /**
     * 获取工具的人员列表
     * @param toolId
     * @return
     */
    List<User> getToolUserName(Integer toolId);

    /**
     * 结束工具
     * @param toolId
     * @return
     */
    Boolean endTool(Integer toolId);

    /**
     * 结束德尔菲问卷
     * @param delphiId
     * @param toolId
     * @param turn
     * @return
     */
    Integer endDelphi(Integer delphiId,Integer toolId,Integer turn);

    /**
     * 查询是否推送到该用户
     * @param account 用户账号
     * @param delphiId 德尔菲问卷编号
     * @return
     */
    Boolean IsParticipant(String account,Integer delphiId);

    /**
     * 新增用户问卷填写情况
     * @param userAnswer 用户回答
     * @return
     */
    Boolean addUserAnswer(UserAnswer userAnswer);

    /**
     * 查询用户问卷完成状态
     * @param delphiId
     * @return
     */
    List<UserFinishState> getFinishState(Integer delphiId);

    /**
     * 分析用户回答结果
     * @param delphiId
     * @return
     */
    Questionnaire analyseUserAnswer(Integer delphiId);


    /**
     * 使用工具
     * @param requestTool 德尔菲列表和用户列表
     * @param  account 创建工具的用户account
     * @return 是否创建成功
     */
    Integer useTool(RequestTool requestTool,String account);

    /**
     * 开启工具
     * @param toolId
     * @return
     */
    Integer startTool(Integer toolId);

    /**
     * 开始议题
     * @param toolId
     * @return
     */
    Integer startAgenda(Integer toolId);

    /**
     * 判断前一个议题是否结束
     * @param toolId
     * @return
     */
    Boolean isPreviousAgendaFinished(Integer toolId);

    /**
     * 获取工具参会人员的account
     * @param id 工具的id
     * @return 参会人员账号的集合
     */
    List<String> selectToolUserAccount(Integer id);

    /**
     * 判断是否是工具的推送人
     * @param toolId
     * @param account
     * @return
     */
    Boolean isToolPusher(Integer toolId,String account);
}
